[Cshell]Cshell基本語法 |
您所在的位置:网站首页 › shell脚本 list › [Cshell]Cshell基本語法 |
CShell Script從入門到精通
如何将命令行的参数传给script呢? 可以这样: 键入script名, 后面跟任何你想要传递的参数. Cshell把script名后面的字符按照词(words)来划分后传递给一个叫做argv的变量数组, 叫做arguments list. 这样命令行的参数就作为words存储于argv中, 连同script名, 分别可以被引用为argv[0], argv[1], ... argv[n], 或者你也可以用等效的方法即$0,$1,...,$n来引用它们,其中n是参数的个数. 一、Cshell基本语法1) 变量 通过set来定义局部变量x,通过$x(或${x})来使用变量x的值,$%x表示变量的值的长度, $?x来判断变量x是否设置,如设置则为1,否则为0。 set x = 5 echo ${x} # echo ${x}, echo $%x全局变量(也叫系統變量)的定义setenv v value 该变量将被此shell派生的所有子shell继承。下面的例子展示了設定系統變量和解除系統變量。 unsetenv MINUS_SRC_USER setenv MINUS_SRC_USER dv01055 $$表示当前进程的PID, $status 或 $? 表示退出状态。2)数组 定义数组myarr, 通过$myarr[index]来访问数组中的值,注意index是从1开始的。通过$myarr或$myarr[*]来访问数组所有的元素。通过$#myarr来查看元素的个数。 set myarr = (str1 str2 str3) ##初始化數組,各個Value之間用空格隔開 echo $myarr[2] # echo $myarr echo $myarr[*] foreach obj ($myarr) echo $obj end set array = (2 3 4 5 6) set cnt = 4 foreach obj ($array) if($obj >= $cnt) then echo "check pass!" else echo "check fail!" endif end3)命令替换 通过set x = `cmd`来执行命令,且结果赋值给变量。 set d = `date` echo $d # echo $d[6]-$d[2]-$d[3]4)命令行参数 通过$argv[1],$argv[2]或$1,$2来访问命令行参数。命令行参数的个数为$#argv。 5)文件名扩展的元字符 只能使用?,*,[abc],[a-c]。 6)IO重定向和管道 将命令的输出重定向到文件为>。 将命令的输出重定向并追加到文件为>>。 将命令的输入重定向到文件为/dev/tty) >& errors。 将命令的输出和错误输出分别重定向(cmd > goodstuff) >& badstuff。 将命令的输出和报错信息重定向到一个文件cmd >& file。 将命令的输出经管道发往另一个命令cmd | cmd. 将命令的输出和报错信息经管道发往另一个命令cmd |& cmd。 条件语句为 cmd && cmd 或 cmd || cmd。 command>”要将字符写入一个不存在的文件时,自动产生该文件的特性。 24、文件操作格式 -操作符 filename -e 文件存在返回1(.true.), 否则返回0(.false.). -r 文件可读返回1,否则返回0. -w ....可写................ -x ....可执行............... -o 文件属于用户本人返回1, 否则返回0. -z 文件长度为0返回1, 否则返回0. -f 文件为普通(plain)文件返回1, 否则返回0. -d 文件为目录文件时返回1, 否则返回0 25、路径名操作 你可以对路径名进行操作, 以便于去掉你不需要的部分. :t (tail)只保留路径名最右边的部分, 而将前面的全部去掉. (相当于basename) :r (root)去掉从"."(dot)开始的后缀部分. :e (end)去掉从左边开始一直的"."的前缀部分. :h (head)去掉最后的一部分, 只保留文件所在的目录名. 26、变量修饰符 :r 返回变量的根。 :e 返回变量的扩展。 :h 返回变量的头。 :t 返回变量的尾。 :gr 返回所有的根。 :ge 返回所有的扩展。 :gh 返回所有的头。 :gt 返回所有的尾。 :q 将一个单词列表变量引起来,将其各部分分隔开。当变量中包含不应进行扩展的文件名元字符时,该选项比较有用。 :x 将一个模式引起来,并将它扩展成单词列表。 set aa=(/progs/num.c /book/chap.ps) 变量部分 格式 输出结果 正常变量 echo $aa /progs/num.c /book/chap.ps 第二个根 echo $aa[2]:r /book/chap 第二个头 echo $aa[2]:h /book 第二个尾 echo $aa[2]:t chap.ps 第二个扩展 echo $aa[2]:e ps 根 echo $aa:r /progs/num /book/chap.ps 全部根 echo $aa:gr /progs/num /book/chap 头 echo $aa:h /progs /book/chap.ps 全部头 echo $aa:gh /progs /book 尾 echo $aa:t num.c /book/chap.ps 全部尾 echo $aa:gt num.c chap.ps 扩展 echo $aa:e c /book/chap.ps 全部扩展 echo $aa:ge c ps27、打印系統時間 %H 小时(以00-23来表示)。 %I 小时(以01-12来表示)。 %K 小时(以0-23来表示)。 %l 小时(以0-12来表示)。 %M 分钟(以00-59来表示)。 %P AM或PM。 %r 时间(含时分秒,小时以12小时AM/PM来表示)。 %s 总秒数。起算时间为1970-01-01 00:00:00 UTC。 %S 秒(以本地的惯用法来表示)。 %T 时间(含时分秒,小时以24小时制来表示)。 %X 时间(以本地的惯用法来表示)。 %Z 市区。 %a 星期的缩写。 %A 星期的完整名称。 %b 月份英文名的缩写。 %B 月份的完整英文名称。 %c 日期与时间。只输入date指令也会显示同样的结果。 %d 日期(以01-31来表示)。 %D 日期(含年月日)。 %j 该年中的第几天。 %m 月份(以01-12来表示)。 %U 该年中的周数。 %w 该周的天数,0代表周日,1代表周一,异词类推。 %x 日期(以本地的惯用法来表示)。 %y 年份(以00-99来表示)。 %Y 年份(以四位数来表示)。 %n 在显示时,插入新的一行。 %t 在显示时,插入tab。 MM 月份(必要) DD 日期(必要) hh 小时(必要) mm 分钟(必要) ss 秒(选择性) 二、CShell應用實例(1)Cshell提取字符串中的数字保存到变量中 temp=`echo "helloworld20180719" | tr -cd "[0-9]" ` echo $temp #输出 20180719(2)Cshell提取字符串中的数字重定向到文件 echo "helloworld20180719" | tr -cd "[0-9]" > mid.txt cat mid.txt #输出20180719在上面的代碼中: >表示 重定向输出到文件,如果文件不存在,会自动创建,如果文件存在,会清空文件。 >>表示追加输出到文件,同样,文件不存在就好创建,文件存在的话会追加新的内容到文件的末尾,原有内容不会影响到。 我们写脚本时经常会使用到>>将标准错误输出及信息重定向到日志文件中。 2>&1表示把 标准错误输出 重定向到 标准输出 &>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中 解释一下 | tr -cd "[0-9]" | 其实就是管道描述符,将上个指令的标准输出。作为下个指令的标准输入 如echo "helloworld20180719" | tr -cd "[0-9]" 意思就是将"helloworld20180719"这句话作为 tr -cd "[0-9]"的输入 tr其实是translate的缩写,主要用于删除文件中的控制字符,或进行字符转换 -d表示删除,[0-9]表示所有数字,-c表示对条件取反 所以tr cd "[0-9]"这句话的意思就是,剔除非数字的字符。 即输出20180719 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |